/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import AlgoritmoPronostico.Parametros;
import config.Parameters;
import java.util.ArrayList;
import packetTracker.Dispatcher;

/**
 *
 * @author Shadow
 */
public class Mapa {
    private static int _ancho;
    private static int _alto;
    private static int _size;
    private static ArrayList<Punto> _puntos;
    private static Punto almacen = null;
    public static void init(int ancho, int alto){
        _ancho = ancho;
        _alto = alto;
        _size = ancho*alto;
        _puntos = new ArrayList<>();
        for(int i= 0;i<ancho;i++){
            for(int j=0;j<alto;j++){ 
                Punto punto = new Punto(i,j);
                if (i==Parameters.getAlmacenX() && j==Parameters.getAlmacenY())
                    almacen = punto;
                _puntos.add(punto);
            }
        }
        for(int n= 0;n<ancho * alto;n++){
            Punto p = _puntos.get(n);
            if(p.getY() != 0) p.agregaAdj(_puntos.get(n-1));
            
            if(p.getY() != alto -1)p.agregaAdj(_puntos.get(n+1));
            
            if(p.getX() != 0)p.agregaAdj(_puntos.get(n-alto));
            
            if(p.getX() != ancho-1)p.agregaAdj(_puntos.get(n+alto));
        }
        Dispatcher.leerBloqueos();
    }
    
    public static void init(int ancho, int alto, String pronostico){
        _ancho = ancho;
        _alto = alto;
        _size = ancho*alto;
        _puntos = new ArrayList<>();
        for(int i= 0;i<ancho;i++){
            for(int j=0;j<alto;j++){ 
                Punto punto = new Punto(i,j);
                if (i==Parametros.getAlmacenX() && j==Parametros.getAlmacenY())
                    almacen = punto;
                _puntos.add(punto);
            }
        }
        for(int n= 0;n<ancho * alto;n++){
            Punto p = _puntos.get(n);
            if(p.getY() != 0) p.agregaAdj(_puntos.get(n-1));
            
            if(p.getY() != alto -1)p.agregaAdj(_puntos.get(n+1));
            
            if(p.getX() != 0)p.agregaAdj(_puntos.get(n-alto));
            
            if(p.getX() != ancho-1)p.agregaAdj(_puntos.get(n+alto));
        }
    }
    
    public static Punto getPunto(int x, int y){
        return _puntos.get(x*_alto + y);
    }
    public static Punto getPunto(Punto p){
        return getPunto(p.getX(),p.getY());
    }
    public static ArrayList<Punto> getPuntos() {
        return _puntos;
    }

    public static void setPuntos(ArrayList<Punto> puntos) {
        _puntos = puntos;
    }

    public static int getAncho() {
        return _ancho;
    }

    public static void setAncho(int ancho) {
        _ancho = ancho;
    }

    public static int getAlto() {
        return _alto;
    }

    public static void setAlto(int alto) {
        _alto = alto;
    }

    public static int getIndicePunto(int x, int y) {
        return x*_alto + y;
    }

    public static Punto getAlmacen() {
        return almacen;
    }

    public static void setAlmacen(Punto almacen) {
        Mapa.almacen = almacen;
    }

    public static int size() {
        return _size;
    }    
}
